imports

library(tidyr)
library(purrr)
library(dplyr)
library(ggplot2)
library(RColorBrewer)
library(reshape2)
library(TTR)
require(smooth)
require(greybox)
require(Mcomp)
library(RColorBrewer)
add_loess <- function(df){
  loess_df <- data.frame(df$timestamps)
  for(i in names(df)){
    if(grepl('absolute', i) & !grepl('loess', i)){
      name <- paste("loess_", i, sep = "")
      print(name)
      df[, name] <- loess(df[,i] ~ df$timestamps, data = df, span=0.65)$fitted
      #loess(value ~ timestamps, data=i, span=0.65)$fitted
      #loess_df$paste("loess_", i) <- loess(value ~ timestamps, data=i, span=0.65)$fitted
    }
  }
  #browser()
  #df <- merge(df, loess_df)
  return(df)
}

load data

inexp_meditation_files = sort(list.files("ffted/",pattern="^0_ffted_med"))
inexp_reference_files = sort(list.files("ffted/",pattern="^0_ffted_ref"))
exp_meditation_files = sort(list.files("ffted/",pattern="^1_ffted_med"))
exp_reference_files = sort(list.files("ffted/",pattern="^1_ffted_ref"))
exp_meditation = list()
for(i in 1:length(exp_meditation_files)) {
  file = exp_meditation_files[i]
  exp_meditation[[i]] <- read.csv(paste("ffted/", file, sep=""))
  exp_meditation[[i]] <- exp_meditation[[i]][rowSums(exp_meditation[[i]] == "-Inf") == 0, , drop = FALSE]
  exp_meditation[[i]] <- add_loess(exp_meditation[[i]])
  print(i)
}
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 1
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 2
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 3
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 4
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 5
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 6
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 7
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 8
inexp_meditation = list()
for(i in 1:length(inexp_meditation_files)) {
  file = inexp_meditation_files[i]
  inexp_meditation[[i]] <-  read.csv(paste("ffted/", file, sep=""))
  inexp_meditation[[i]] <- inexp_meditation[[i]][rowSums(inexp_meditation[[i]] == "-Inf") == 0, , drop = FALSE]
  inexp_meditation[[i]] <- add_loess(inexp_meditation[[i]])
  print(i)
}
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 1
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 2
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 3
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 4
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 5
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 6
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 7
exp_reference = list()
for(i in 1:length(exp_reference_files)) {
  file = exp_reference_files[i]
  exp_reference[[i]] <-  read.csv(paste("ffted/", file, sep=""))
  exp_reference[[i]] <- exp_reference[[i]][rowSums(exp_reference[[i]] == "-Inf") == 0, , drop = FALSE]
  exp_reference[[i]] <- add_loess(exp_reference[[i]])
  print(i)
}
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 1
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 2
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 3
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 4
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 5
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 6
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 7
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 8
inexp_reference = list()
for(i in 1:length(inexp_reference_files)) {
  file = inexp_reference_files[i]
  inexp_reference[[i]] <-  read.csv(paste("ffted/", file, sep=""))
  inexp_reference[[i]] <- inexp_reference[[i]][rowSums(inexp_reference[[i]] == "-Inf") == 0, , drop = FALSE]
  inexp_reference[[i]] <- add_loess(inexp_reference[[i]])
  print(i)
}
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 1
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 2
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 3
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 4
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 5
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 6
[1] "loess_delta_absolute_1"
[1] "loess_theta_absolute_1"
[1] "loess_alpha_absolute_1"
[1] "loess_beta_absolute_1"
[1] "loess_gamma_absolute_1"
[1] "loess_delta_absolute_2"
[1] "loess_theta_absolute_2"
[1] "loess_alpha_absolute_2"
[1] "loess_beta_absolute_2"
[1] "loess_gamma_absolute_2"
[1] "loess_delta_absolute_3"
[1] "loess_theta_absolute_3"
[1] "loess_alpha_absolute_3"
[1] "loess_beta_absolute_3"
[1] "loess_gamma_absolute_3"
[1] "loess_delta_absolute_4"
[1] "loess_theta_absolute_4"
[1] "loess_alpha_absolute_4"
[1] "loess_beta_absolute_4"
[1] "loess_gamma_absolute_4"
[1] 7

convert time from absolute to relative

convert_time <- function(timestamps){
  time <- timestamps - min(timestamps)
  return(time)
}

subsetting data

subset_and_melt <- function(med, exp, wave, electrodes, melt, melt_all){
  if(med){
    if(exp){
      df <- exp_meditation
    }
    else{
      df <- inexp_meditation
    }
  }
  else{
    if(exp){
      df <- exp_reference
    }
    else{
      df <- inexp_reference
    }
  }
  data = list()
  for(i in 1:length(df)) {
  data[[i]] <- df[[i]][, grepl(paste('(', wave, ')|(', electrodes, ')|(timestamp)', sep = ""), names(df[[i]]))]
  data[[i]]$timestamps <- convert_time(data[[i]]$timestamps)
  if(melt){
    data[[i]] <- melt(data[[i]], id.vars = 'timestamps', variable.name = 'waves')
    data[[i]]$waves <- as.factor(data[[i]]$waves)
  }
  }
  if(melt_all){
    data <- melt(data, id.vars = c('timestamps', 'waves', 'value'))
    data$L1 <- as.factor(data$L1)
  }
  
  return(data)
}

testing

temp_2 <- subset_and_melt(FALSE, TRUE, "beta", "None", TRUE, TRUE)
#ggplot(temp_2[[1]], aes(timestamps,value)) + geom_line(aes(colour = waves))

things to think about: * extreme points, spikes, etc * different smoothing rate * difference between meditative and regular state * difference between experienced meditators and newbies * how to determine the levels and scale it for others * what happens when meditation is stable * explore the coherence between alpha and theta waves

explore experienced/inexperienced distributions of alpha wave

alpha_exp_med = subset_and_melt(TRUE, TRUE, 'alpha', 'ALL', TRUE, TRUE)
alpha_inexp_med = subset_and_melt(TRUE, FALSE, 'alpha', 'ALL', TRUE, TRUE)
alpha_exp_med$exp <- "experienced"
alpha_exp_med$exp <- as.factor(alpha_exp_med$exp)
alpha_inexp_med$exp <- "inexperienced"
alpha_inexp_med$exp <- as.factor(alpha_inexp_med$exp)
temp <- rbind(alpha_exp_med, alpha_inexp_med)
ggplot(temp, aes(value, fill = exp)) + 
  geom_histogram(alpha = 0.5, bins = 100, position = 'identity')

explore experienced/inexperienced distributions of theta wave

theta_exp_med = subset_and_melt(TRUE, TRUE, 'theta', 'ALL', TRUE, TRUE)
theta_inexp_med = subset_and_melt(TRUE, FALSE, 'theta', 'ALL', TRUE, TRUE)
theta_exp_med$exp <- "experienced"
theta_exp_med$exp <- as.factor(theta_exp_med$exp)
theta_inexp_med$exp <- "inexperienced"
theta_inexp_med$exp <- as.factor(theta_inexp_med$exp)
temp <- rbind(theta_exp_med, theta_inexp_med)
ggplot(temp, aes(value, fill = exp)) + 
  geom_histogram(alpha = 0.5, bins = 100, position = 'identity')

explore experienced/inexperienced distributions of beta wave

beta_exp_med = subset_and_melt(TRUE, TRUE, 'beta', 'ALL', TRUE, TRUE)
beta_inexp_med = subset_and_melt(TRUE, FALSE, 'beta', 'ALL', TRUE, TRUE)
beta_exp_med$exp <- "experienced"
beta_exp_med$exp <- as.factor(beta_exp_med$exp)
beta_inexp_med$exp <- "inexperienced"
beta_inexp_med$exp <- as.factor(beta_inexp_med$exp)
temp <- rbind(beta_exp_med, beta_inexp_med)
ggplot(temp, aes(value, fill = exp)) + 
  geom_histogram(alpha = 0.5, bins = 100, position = 'identity')

explore experienced/inexperienced distributions of gamma wave

gamma_exp_med = subset_and_melt(TRUE, TRUE, 'gamma', 'ALL', TRUE, TRUE)
gamma_inexp_med = subset_and_melt(TRUE, FALSE, 'gamma', 'ALL', TRUE, TRUE)
gamma_exp_med$exp <- "experienced"
gamma_exp_med$exp <- as.factor(gamma_exp_med$exp)
gamma_inexp_med$exp <- "inexperienced"
gamma_inexp_med$exp <- as.factor(gamma_inexp_med$exp)
temp <- rbind(gamma_exp_med, gamma_inexp_med)
ggplot(temp, aes(value, fill = exp)) + 
  geom_histogram(alpha = 0.5, bins = 100, position = 'identity')

explore experienced/inexperienced distributions of delta wave

t.test(na.omit(alpha_exp_med$value), na.omit(alpha_inexp_med$value), var.equal = TRUE)

    Two Sample t-test

data:  na.omit(alpha_exp_med$value) and na.omit(alpha_inexp_med$value)
t = 101.66, df = 685930, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2013323 0.2092484
sample estimates:
mean of x mean of y 
0.9737287 0.7684384 
t.test(na.omit(alpha_exp_med$value), na.omit(alpha_inexp_med$value), var.equal = TRUE)

    Two Sample t-test

data:  na.omit(alpha_exp_med$value) and na.omit(alpha_inexp_med$value)
t = 150.31, df = 1371900, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2020223 0.2073607
sample estimates:
mean of x mean of y 
0.9738498 0.7691583 
t_test <- function(wave, med){
  wave_exp <- subset_and_melt(med, TRUE, wave, "All", TRUE, FALSE)
  medians_exp <- list()
  for(i in 1:length(wave_exp)){
    medians_exp[[i]] <- median(wave_exp[[i]]$value)
  }
  wave_inexp <- subset_and_melt(med, FALSE, wave, "All", TRUE, FALSE)
  medians_inexp <- list()
  for(i in 1:length(wave_inexp)){
    medians_inexp[[i]] <- median(wave_inexp[[i]]$value)
  }
  
  medians_exp <- unlist(medians_exp, use.names=FALSE)
  medians_inexp <- unlist(medians_inexp, use.names=FALSE)
  return(print(t.test(medians_exp, medians_inexp)))
}
a <- t_test("beta", TRUE)

    Welch Two Sample t-test

data:  medians_exp and medians_inexp
t = -0.18003, df = 7.7255, p-value = 0.8618
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.4753273  0.4068778
sample estimates:
mean of x mean of y 
0.8503494 0.8845742 
a <- t_test("gamma", TRUE)

    Welch Two Sample t-test

data:  medians_exp and medians_inexp
t = -0.43366, df = 7.0362, p-value = 0.6775
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.5995961  0.4135896
sample estimates:
mean of x mean of y 
0.4898110 0.5828143 
a <- t_test("delta", TRUE)

    Welch Two Sample t-test

data:  medians_exp and medians_inexp
t = 0.76505, df = 9.4431, p-value = 0.4629
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2353533  0.4785046
sample estimates:
mean of x mean of y 
0.3027340 0.1811583 
a <- t_test("theta", TRUE)

    Welch Two Sample t-test

data:  medians_exp and medians_inexp
t = 0.57218, df = 12.632, p-value = 0.5772
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2152788  0.3697712
sample estimates:
mean of x mean of y 
0.7990211 0.7217749 
a <- t_test("theta", TRUE)

There is no significant statistical difference in medians and means between experienced and inexperienced people

t_test_min <- function(wave, med){
  wave_exp <- subset_and_melt(med, TRUE, wave, "All", TRUE, FALSE)
  medians_exp <- list()
  for(i in 1:length(wave_exp)){
    medians_exp[[i]] <- min(wave_exp[[i]]$value)
  }
  wave_inexp <- subset_and_melt(med, FALSE, wave, "All", TRUE, FALSE)
  medians_inexp <- list()
  for(i in 1:length(wave_inexp)){
    medians_inexp[[i]] <- min(wave_inexp[[i]]$value)
  }
  
  medians_exp <- unlist(medians_exp, use.names=FALSE)
  medians_inexp <- unlist(medians_inexp, use.names=FALSE)
  return(print(t.test(medians_exp, medians_inexp)))
}
a <- t_test_min("alpha", TRUE)
a <- t_test_min("theta", TRUE)
a <- t_test_min("gamma", TRUE)
a <- t_test_min("beta", TRUE)
a <- t_test_min("delta", TRUE)
t_test_max <- function(wave, med){
  wave_exp <- subset_and_melt(med, TRUE, wave, "All", TRUE, FALSE)
  medians_exp <- list()
  for(i in 1:length(wave_exp)){
    medians_exp[[i]] <- max(wave_exp[[i]]$value)
  }
  wave_inexp <- subset_and_melt(med, FALSE, wave, "All", TRUE, FALSE)
  medians_inexp <- list()
  for(i in 1:length(wave_inexp)){
    medians_inexp[[i]] <- max(wave_inexp[[i]]$value)
  }
  
  medians_exp <- unlist(medians_exp, use.names=FALSE)
  medians_inexp <- unlist(medians_inexp, use.names=FALSE)
  return(print(t.test(medians_exp, medians_inexp)))
}
a <- t_test_max("alpha", TRUE)
a <- t_test_max("theta", TRUE)
a <- t_test_max("gamma", TRUE)
a <- t_test_max("beta", TRUE)
a <- t_test_max("delta", TRUE)
#ggplot(temp, aes(value, fill = exp)) + 
#  geom_histogram(alpha = 0.5, bins = 100, position = 'identity')

data_temp <- subset_and_melt(TRUE, TRUE, 'alpha', "ALL", TRUE, TRUE)

#geom_line(aes(y=theta_absolute_2, x = timestamps), 
#       data = without_na, color=brewer.pal(4, "Blues")[3]) + #geom_smooth(aes(y=theta_absolute_2, x = timestamps), 
#       data = without_na, color=brewer.pal(4, "Blues")[3], span = 0.01) +
temp <- es(to_draw$value, h=18, holdout=TRUE, silent=FALSE)
The provided data is not ts object. Only non-seasonal models are available.
Only additive models are allowed with non-positive data.
Forming the pool of models based on... ANN, AAN, Estimation progress:    100%... Done! 

temp <- es(to_draw$value, h=18, holdout=TRUE, silent=FALSE)
#to_draw_part$sma <- sma(to_draw_part$value, n = 5, v = 0.9)$fitted
to_draw_part$loess <- loess(value ~ timestamps, data=to_draw_part, span=0.65)$fitted

ggplot() +
  geom_line(aes(y = value, x = timestamps), data = to_draw_part) +
  geom_smooth(aes(y = value, x = timestamps), data = to_draw_part, span = 1, n = 15, color = "blue") +
  geom_line(aes(y = loess, x = timestamps), data = to_draw_part, color = 'red')
ggplot() +
  geom_smooth(aes(y = value, x = timestamps), data = theta_exp_med[theta_exp_med$waves == 'loess_theta_absolute_2',], span = 1, n = 15, color = "blue") +
  geom_line(aes(y = value, x = timestamps), data = theta_exp_med[theta_exp_med$waves == 'loess_theta_absolute_2',], color = 'red', alpha = 0.2) +
  geom_line(aes(y = value, x = timestamps), data = theta_exp_med[theta_exp_med$waves == 'theta_absolute_2',], color = 'black', alpha = 0.2)

curr_data <- theta_exp_med[theta_exp_med$L1 == '1',]
#[theta_exp_med$waves == 'theta_absolute_2' & 
    
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'theta_absolute_2', ], color = 'red', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_theta_absolute_2',], color = 'black', alpha = 1)

temp <- curr_data[curr_data$waves == 'loess_theta_absolute_2', ]
loess_ordered <- temp$value
loess_ordered <- sort(loess_ordered)
min(loess_ordered)
[1] 0.3447938
barplot(loess_ordered)

temp$state <- cut(temp$value, quantile(temp$value,(0:5)/5))
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'theta_absolute_2', ], color = 'grey', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_theta_absolute_2',], color = 'black', alpha = 1) +
  geom_line(aes(y = value, x = timestamps, color = state, size = 2),data = temp, alpha = 1) 

NA

theta_2, second person

curr_data <- theta_exp_med[theta_exp_med$L1 == '2',]
temp <- curr_data[curr_data$waves == 'loess_theta_absolute_2', ]
temp$state <- cut(temp$value, quantile(temp$value,(0:5)/5))
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'theta_absolute_2', ], color = 'grey', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_theta_absolute_2',], color = 'black', alpha = 1) +
  geom_line(aes(y = value, x = timestamps, color = state, size = 2),data = temp, alpha = 1) 

curr_data <- theta_exp_med[theta_exp_med$L1 == '3',]
temp <- curr_data[curr_data$waves == 'loess_theta_absolute_2', ]
temp$state <- cut(temp$value, quantile(temp$value,(0:5)/5))
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'theta_absolute_2', ], color = 'grey', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_theta_absolute_2',], color = 'black', alpha = 1) +
  geom_line(aes(y = value, x = timestamps, color = state, size = 2),data = temp, alpha = 1) 

curr_data <- theta_exp_med[theta_exp_med$L1 == '4',]
temp <- curr_data[curr_data$waves == 'loess_theta_absolute_2', ]
temp$state <- cut(temp$value, quantile(temp$value,(0:5)/5))
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'theta_absolute_2', ], color = 'grey', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_theta_absolute_2',], color = 'black', alpha = 1) +
  geom_line(aes(y = value, x = timestamps, color = state, size = 2),data = temp, alpha = 1) 

curr_data <- theta_exp_med[theta_exp_med$L1 == '6',]
temp <- curr_data[curr_data$waves == 'loess_theta_absolute_2', ]
temp$state <- cut(temp$value, quantile(temp$value,(0:5)/5))
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'theta_absolute_2', ], color = 'grey', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_theta_absolute_2',], color = 'black', alpha = 1) +
  geom_line(aes(y = value, x = timestamps, color = state, size = 2),data = temp, alpha = 1) 

curr_data <- theta_exp_med[theta_exp_med$L1 == '7',]
temp <- curr_data[curr_data$waves == 'loess_theta_absolute_2', ]
temp$state <- cut(temp$value, quantile(temp$value,(0:5)/5))
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'theta_absolute_2', ], color = 'grey', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_theta_absolute_2',], color = 'black', alpha = 1) +
  geom_line(aes(y = value, x = timestamps, color = state, size = 2),data = temp, alpha = 1) 

curr_data <- theta_exp_med[theta_exp_med$L1 == '8',]
temp <- curr_data[curr_data$waves == 'loess_theta_absolute_2', ]
temp$state <- cut(temp$value, quantile(temp$value,(0:5)/5))
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'theta_absolute_2', ], color = 'grey', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_theta_absolute_2',], color = 'black', alpha = 1) +
  geom_line(aes(y = value, x = timestamps, color = state, size = 2),data = temp, alpha = 1) 

curr_data <- alpha_exp_med[theta_exp_med$L1 == '1',]
temp <- curr_data[curr_data$waves == 'loess_alpha_absolute_2', ]
temp$state <- cut(temp$value, quantile(temp$value,(0:5)/5))
ggplot(aes(y = value, x = timestamps), data = curr_data) +
  geom_line(data = curr_data[curr_data$waves == 'alpha_absolute_2', ], color = 'grey', alpha = 0.7) +
  geom_line(data = curr_data[curr_data$waves == 'loess_alpha_absolute_2',], color = 'black', alpha = 1) +
  geom_line(aes(y = value, x = timestamps, color = state, size = 2),data = temp, alpha = 1) 

alpha_2_all_exp <- subset_and_melt(TRUE, TRUE, 'alpha', 'All', TRUE, TRUE)
ggplot(aes(x = timestamps, y = value), data = alpha_2_all_exp[alpha_2_all_exp$waves == 'loess_alpha_absolute_2',]) +
  geom_line(aes(color = L1)) +
  ggtitle("alpha 2, exp")

alpha_2_all_exp <- subset_and_melt(TRUE, TRUE, 'alpha', 'All', TRUE, TRUE)
ggplot(aes(x = timestamps, y = value), data = alpha_2_all_exp[alpha_2_all_exp$waves == 'loess_alpha_absolute_1',]) +
  geom_line(aes(color = L1)) +
  ggtitle("alpha 1, exp")

alpha_2_all_exp <- subset_and_melt(TRUE, TRUE, 'alpha', 'All', TRUE, TRUE)
ggplot(aes(x = timestamps, y = value), data = alpha_2_all_exp[alpha_2_all_exp$waves == 'loess_alpha_absolute_3',]) +
  geom_line(aes(color = L1)) +
  ggtitle("alpha 3, exp")

alpha_2_all_exp <- subset_and_melt(TRUE, TRUE, 'alpha', 'All', TRUE, TRUE)
ggplot(aes(x = timestamps, y = value), data = alpha_2_all_exp[alpha_2_all_exp$waves == 'loess_alpha_absolute_4',]) +
  geom_line(aes(color = L1)) +
  ggtitle("alpha 4, exp")

alpha_2_all_exp <- subset_and_melt(TRUE, FALSE, 'alpha', 'All', TRUE, TRUE)
ggplot(aes(x = timestamps, y = value), data = alpha_2_all_exp[alpha_2_all_exp$waves == 'loess_alpha_absolute_2',]) +
  geom_line(aes(color = L1)) +
  ggtitle("alpha 2, inexp")

ggplot(aes(x = timestamps, y = value), data = alpha_2_all_exp[alpha_2_all_exp$waves == 'loess_alpha_absolute_1',]) +
  geom_line(aes(color = L1)) +
  ggtitle("alpha 1, inexp")

ggplot(aes(x = timestamps, y = value), data = alpha_2_all_exp[alpha_2_all_exp$waves == 'loess_alpha_absolute_3',]) +
  geom_line(aes(color = L1)) +
  ggtitle("alpha 3, inexp")

ggplot(aes(x = timestamps, y = value), data = alpha_2_all_exp[alpha_2_all_exp$waves == 'loess_alpha_absolute_4',]) +
  geom_line(aes(color = L1)) +
  ggtitle("alpha 4, inexp")

temp <- subset_and_melt(TRUE, TRUE, 'theta', 'All', TRUE, TRUE)
ggplot(aes(x = timestamps, y = value), data = temp[temp$waves == 'loess_theta_absolute_1',]) +
  geom_line(aes(color = L1)) +
  ggtitle("theta 1, exp")

ggplot(aes(x = timestamps, y = value), data = temp[temp$waves == 'loess_theta_absolute_2',]) +
  geom_line(aes(color = L1)) +
  ggtitle("theta 2, exp")

ggplot(aes(x = timestamps, y = value), data = temp[temp$waves == 'loess_theta_absolute_3',]) +
  geom_line(aes(color = L1)) +
  ggtitle("theta 3, exp")

ggplot(aes(x = timestamps, y = value), data = temp[temp$waves == 'loess_theta_absolute_4',]) +
  geom_line(aes(color = L1)) +
  ggtitle("theta 4, exp")

temp <- subset_and_melt(TRUE, TRUE, 'alpha', 'theta', TRUE, TRUE)
ggplot() +
  geom_line(aes(x = timestamps, y = value, color = L1), data = temp[temp$waves == 'loess_theta_absolute_1',],  size = 1) +
  ggtitle("theta 1 and alpha 1, exp") +
  geom_line(aes(x = timestamps, y = value, color = L1), data = temp[temp$waves == 'loess_alpha_absolute_1',], linetype = 'dotted', size = 1) +
  scale_color_brewer(palette = "Spectral")

ggplot() +
  geom_line(aes(x = timestamps, y = value, color = L1), data = temp[temp$waves == 'loess_theta_absolute_2',],  size = 1) +
  geom_line(aes(x = timestamps, y = value, color = L1), data = temp[temp$waves == 'loess_alpha_absolute_2',], linetype = 'dotted', size = 1) +
  scale_color_brewer(palette = "Spectral") +
  ggtitle("theta 2 and alpha 2, exp")

ggplot() +
  geom_line(aes(x = timestamps, y = value, color = L1), data = temp[temp$waves == 'loess_theta_absolute_3',],  size = 1) +
  geom_line(aes(x = timestamps, y = value, color = L1), data = temp[temp$waves == 'loess_alpha_absolute_3',], linetype = 'dotted', size = 1) +
  scale_color_brewer(palette = "Spectral") +
  ggtitle("theta 3 and alpha 3, exp")

ggplot() +
  geom_line(aes(x = timestamps, y = value, color = L1), data = temp[temp$waves == 'loess_theta_absolute_4',],  size = 1) +
  geom_line(aes(x = timestamps, y = value, color = L1), data = temp[temp$waves == 'loess_alpha_absolute_4',], linetype = 'dotted', size = 1) +
  scale_color_brewer(palette = "Spectral") +
  ggtitle("theta 4 and alpha 4, exp")

LS0tCnRpdGxlOiAiRUVHIGFuYWx5c2lzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgppbXBvcnRzCmBgYHtyfQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KHB1cnJyKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KHJlc2hhcGUyKQpsaWJyYXJ5KFRUUikKcmVxdWlyZShzbW9vdGgpCnJlcXVpcmUoZ3JleWJveCkKcmVxdWlyZShNY29tcCkKbGlicmFyeShSQ29sb3JCcmV3ZXIpCmBgYAoKCmBgYHtyfQphZGRfbG9lc3MgPC0gZnVuY3Rpb24oZGYpewogIGxvZXNzX2RmIDwtIGRhdGEuZnJhbWUoZGYkdGltZXN0YW1wcykKICBmb3IoaSBpbiBuYW1lcyhkZikpewogICAgaWYoZ3JlcGwoJ2Fic29sdXRlJywgaSkgJiAhZ3JlcGwoJ2xvZXNzJywgaSkpewogICAgICBuYW1lIDwtIHBhc3RlKCJsb2Vzc18iLCBpLCBzZXAgPSAiIikKICAgICAgcHJpbnQobmFtZSkKICAgICAgZGZbLCBuYW1lXSA8LSBsb2VzcyhkZlssaV0gfiBkZiR0aW1lc3RhbXBzLCBkYXRhID0gZGYsIHNwYW49MC42NSkkZml0dGVkCiAgICAgICNsb2Vzcyh2YWx1ZSB+IHRpbWVzdGFtcHMsIGRhdGE9aSwgc3Bhbj0wLjY1KSRmaXR0ZWQKICAgICAgI2xvZXNzX2RmJHBhc3RlKCJsb2Vzc18iLCBpKSA8LSBsb2Vzcyh2YWx1ZSB+IHRpbWVzdGFtcHMsIGRhdGE9aSwgc3Bhbj0wLjY1KSRmaXR0ZWQKICAgIH0KICB9CiAgI2RmIDwtIG1lcmdlKGRmLCBsb2Vzc19kZikKICByZXR1cm4oZGYpCn0KYGBgCgpsb2FkIGRhdGEKYGBge3J9CmluZXhwX21lZGl0YXRpb25fZmlsZXMgPSBzb3J0KGxpc3QuZmlsZXMoImZmdGVkLyIscGF0dGVybj0iXjBfZmZ0ZWRfbWVkIikpCmluZXhwX3JlZmVyZW5jZV9maWxlcyA9IHNvcnQobGlzdC5maWxlcygiZmZ0ZWQvIixwYXR0ZXJuPSJeMF9mZnRlZF9yZWYiKSkKZXhwX21lZGl0YXRpb25fZmlsZXMgPSBzb3J0KGxpc3QuZmlsZXMoImZmdGVkLyIscGF0dGVybj0iXjFfZmZ0ZWRfbWVkIikpCmV4cF9yZWZlcmVuY2VfZmlsZXMgPSBzb3J0KGxpc3QuZmlsZXMoImZmdGVkLyIscGF0dGVybj0iXjFfZmZ0ZWRfcmVmIikpCgpleHBfbWVkaXRhdGlvbiA9IGxpc3QoKQpmb3IoaSBpbiAxOmxlbmd0aChleHBfbWVkaXRhdGlvbl9maWxlcykpIHsKICBmaWxlID0gZXhwX21lZGl0YXRpb25fZmlsZXNbaV0KICBleHBfbWVkaXRhdGlvbltbaV1dIDwtIHJlYWQuY3N2KHBhc3RlKCJmZnRlZC8iLCBmaWxlLCBzZXA9IiIpKQogIGV4cF9tZWRpdGF0aW9uW1tpXV0gPC0gZXhwX21lZGl0YXRpb25bW2ldXVtyb3dTdW1zKGV4cF9tZWRpdGF0aW9uW1tpXV0gPT0gIi1JbmYiKSA9PSAwLCAsIGRyb3AgPSBGQUxTRV0KICBleHBfbWVkaXRhdGlvbltbaV1dIDwtIGFkZF9sb2VzcyhleHBfbWVkaXRhdGlvbltbaV1dKQogIHByaW50KGkpCn0KCmluZXhwX21lZGl0YXRpb24gPSBsaXN0KCkKZm9yKGkgaW4gMTpsZW5ndGgoaW5leHBfbWVkaXRhdGlvbl9maWxlcykpIHsKICBmaWxlID0gaW5leHBfbWVkaXRhdGlvbl9maWxlc1tpXQogIGluZXhwX21lZGl0YXRpb25bW2ldXSA8LSAgcmVhZC5jc3YocGFzdGUoImZmdGVkLyIsIGZpbGUsIHNlcD0iIikpCiAgaW5leHBfbWVkaXRhdGlvbltbaV1dIDwtIGluZXhwX21lZGl0YXRpb25bW2ldXVtyb3dTdW1zKGluZXhwX21lZGl0YXRpb25bW2ldXSA9PSAiLUluZiIpID09IDAsICwgZHJvcCA9IEZBTFNFXQogIGluZXhwX21lZGl0YXRpb25bW2ldXSA8LSBhZGRfbG9lc3MoaW5leHBfbWVkaXRhdGlvbltbaV1dKQogIHByaW50KGkpCn0KCmV4cF9yZWZlcmVuY2UgPSBsaXN0KCkKZm9yKGkgaW4gMTpsZW5ndGgoZXhwX3JlZmVyZW5jZV9maWxlcykpIHsKICBmaWxlID0gZXhwX3JlZmVyZW5jZV9maWxlc1tpXQogIGV4cF9yZWZlcmVuY2VbW2ldXSA8LSAgcmVhZC5jc3YocGFzdGUoImZmdGVkLyIsIGZpbGUsIHNlcD0iIikpCiAgZXhwX3JlZmVyZW5jZVtbaV1dIDwtIGV4cF9yZWZlcmVuY2VbW2ldXVtyb3dTdW1zKGV4cF9yZWZlcmVuY2VbW2ldXSA9PSAiLUluZiIpID09IDAsICwgZHJvcCA9IEZBTFNFXQogIGV4cF9yZWZlcmVuY2VbW2ldXSA8LSBhZGRfbG9lc3MoZXhwX3JlZmVyZW5jZVtbaV1dKQogIHByaW50KGkpCn0KCmluZXhwX3JlZmVyZW5jZSA9IGxpc3QoKQpmb3IoaSBpbiAxOmxlbmd0aChpbmV4cF9yZWZlcmVuY2VfZmlsZXMpKSB7CiAgZmlsZSA9IGluZXhwX3JlZmVyZW5jZV9maWxlc1tpXQogIGluZXhwX3JlZmVyZW5jZVtbaV1dIDwtICByZWFkLmNzdihwYXN0ZSgiZmZ0ZWQvIiwgZmlsZSwgc2VwPSIiKSkKICBpbmV4cF9yZWZlcmVuY2VbW2ldXSA8LSBpbmV4cF9yZWZlcmVuY2VbW2ldXVtyb3dTdW1zKGluZXhwX3JlZmVyZW5jZVtbaV1dID09ICItSW5mIikgPT0gMCwgLCBkcm9wID0gRkFMU0VdCiAgaW5leHBfcmVmZXJlbmNlW1tpXV0gPC0gYWRkX2xvZXNzKGluZXhwX3JlZmVyZW5jZVtbaV1dKQogIHByaW50KGkpCn0KYGBgCgoKY29udmVydCB0aW1lIGZyb20gYWJzb2x1dGUgdG8gcmVsYXRpdmUKYGBge3J9CmNvbnZlcnRfdGltZSA8LSBmdW5jdGlvbih0aW1lc3RhbXBzKXsKICB0aW1lIDwtIHRpbWVzdGFtcHMgLSBtaW4odGltZXN0YW1wcykKICByZXR1cm4odGltZSkKfQpgYGAKCgpzdWJzZXR0aW5nIGRhdGEKYGBge3J9CnN1YnNldF9hbmRfbWVsdCA8LSBmdW5jdGlvbihtZWQsIGV4cCwgd2F2ZSwgZWxlY3Ryb2RlcywgbWVsdCwgbWVsdF9hbGwpewogIGlmKG1lZCl7CiAgICBpZihleHApewogICAgICBkZiA8LSBleHBfbWVkaXRhdGlvbgogICAgfQogICAgZWxzZXsKICAgICAgZGYgPC0gaW5leHBfbWVkaXRhdGlvbgogICAgfQogIH0KICBlbHNlewogICAgaWYoZXhwKXsKICAgICAgZGYgPC0gZXhwX3JlZmVyZW5jZQogICAgfQogICAgZWxzZXsKICAgICAgZGYgPC0gaW5leHBfcmVmZXJlbmNlCiAgICB9CiAgfQoKICBkYXRhID0gbGlzdCgpCiAgZm9yKGkgaW4gMTpsZW5ndGgoZGYpKSB7CiAgZGF0YVtbaV1dIDwtIGRmW1tpXV1bLCBncmVwbChwYXN0ZSgnKCcsIHdhdmUsICcpfCgnLCBlbGVjdHJvZGVzLCAnKXwodGltZXN0YW1wKScsIHNlcCA9ICIiKSwgbmFtZXMoZGZbW2ldXSkpXQogIGRhdGFbW2ldXSR0aW1lc3RhbXBzIDwtIGNvbnZlcnRfdGltZShkYXRhW1tpXV0kdGltZXN0YW1wcykKICBpZihtZWx0KXsKICAgIGRhdGFbW2ldXSA8LSBtZWx0KGRhdGFbW2ldXSwgaWQudmFycyA9ICd0aW1lc3RhbXBzJywgdmFyaWFibGUubmFtZSA9ICd3YXZlcycpCiAgICBkYXRhW1tpXV0kd2F2ZXMgPC0gYXMuZmFjdG9yKGRhdGFbW2ldXSR3YXZlcykKICB9CiAgfQogIGlmKG1lbHRfYWxsKXsKICAgIGRhdGEgPC0gbWVsdChkYXRhLCBpZC52YXJzID0gYygndGltZXN0YW1wcycsICd3YXZlcycsICd2YWx1ZScpKQogICAgZGF0YSRMMSA8LSBhcy5mYWN0b3IoZGF0YSRMMSkKICB9CiAgCiAgcmV0dXJuKGRhdGEpCn0KYGBgCgp0ZXN0aW5nCmBgYHtyfQp0ZW1wXzIgPC0gc3Vic2V0X2FuZF9tZWx0KEZBTFNFLCBUUlVFLCAiYmV0YSIsICJOb25lIiwgVFJVRSwgVFJVRSkKI2dncGxvdCh0ZW1wXzJbWzFdXSwgYWVzKHRpbWVzdGFtcHMsdmFsdWUpKSArIGdlb21fbGluZShhZXMoY29sb3VyID0gd2F2ZXMpKQpgYGAKCnRoaW5ncyB0byB0aGluayBhYm91dDoKKiBleHRyZW1lIHBvaW50cywgc3Bpa2VzLCBldGMKKiBkaWZmZXJlbnQgc21vb3RoaW5nIHJhdGUKKiBkaWZmZXJlbmNlIGJldHdlZW4gbWVkaXRhdGl2ZSBhbmQgcmVndWxhciBzdGF0ZQoqIGRpZmZlcmVuY2UgYmV0d2VlbiBleHBlcmllbmNlZCBtZWRpdGF0b3JzIGFuZCBuZXdiaWVzCiogaG93IHRvIGRldGVybWluZSB0aGUgbGV2ZWxzIGFuZCBzY2FsZSBpdCBmb3Igb3RoZXJzCiogd2hhdCBoYXBwZW5zIHdoZW4gbWVkaXRhdGlvbiBpcyBzdGFibGUKKiBleHBsb3JlIHRoZSBjb2hlcmVuY2UgYmV0d2VlbiBhbHBoYSBhbmQgdGhldGEgd2F2ZXMKCgpleHBsb3JlIGV4cGVyaWVuY2VkL2luZXhwZXJpZW5jZWQgZGlzdHJpYnV0aW9ucyBvZiBhbHBoYSB3YXZlCmBgYHtyfQphbHBoYV9leHBfbWVkID0gc3Vic2V0X2FuZF9tZWx0KFRSVUUsIFRSVUUsICdhbHBoYScsICdBTEwnLCBUUlVFLCBUUlVFKQphbHBoYV9pbmV4cF9tZWQgPSBzdWJzZXRfYW5kX21lbHQoVFJVRSwgRkFMU0UsICdhbHBoYScsICdBTEwnLCBUUlVFLCBUUlVFKQphbHBoYV9leHBfbWVkJGV4cCA8LSAiZXhwZXJpZW5jZWQiCmFscGhhX2V4cF9tZWQkZXhwIDwtIGFzLmZhY3RvcihhbHBoYV9leHBfbWVkJGV4cCkKYWxwaGFfaW5leHBfbWVkJGV4cCA8LSAiaW5leHBlcmllbmNlZCIKYWxwaGFfaW5leHBfbWVkJGV4cCA8LSBhcy5mYWN0b3IoYWxwaGFfaW5leHBfbWVkJGV4cCkKdGVtcCA8LSByYmluZChhbHBoYV9leHBfbWVkLCBhbHBoYV9pbmV4cF9tZWQpCmdncGxvdCh0ZW1wLCBhZXModmFsdWUsIGZpbGwgPSBleHApKSArIAogIGdlb21faGlzdG9ncmFtKGFscGhhID0gMC41LCBiaW5zID0gMTAwLCBwb3NpdGlvbiA9ICdpZGVudGl0eScpCmBgYAoKZXhwbG9yZSBleHBlcmllbmNlZC9pbmV4cGVyaWVuY2VkIGRpc3RyaWJ1dGlvbnMgb2YgdGhldGEgd2F2ZQpgYGB7cn0KdGhldGFfZXhwX21lZCA9IHN1YnNldF9hbmRfbWVsdChUUlVFLCBUUlVFLCAndGhldGEnLCAnQUxMJywgVFJVRSwgVFJVRSkKdGhldGFfaW5leHBfbWVkID0gc3Vic2V0X2FuZF9tZWx0KFRSVUUsIEZBTFNFLCAndGhldGEnLCAnQUxMJywgVFJVRSwgVFJVRSkKdGhldGFfZXhwX21lZCRleHAgPC0gImV4cGVyaWVuY2VkIgp0aGV0YV9leHBfbWVkJGV4cCA8LSBhcy5mYWN0b3IodGhldGFfZXhwX21lZCRleHApCnRoZXRhX2luZXhwX21lZCRleHAgPC0gImluZXhwZXJpZW5jZWQiCnRoZXRhX2luZXhwX21lZCRleHAgPC0gYXMuZmFjdG9yKHRoZXRhX2luZXhwX21lZCRleHApCnRlbXAgPC0gcmJpbmQodGhldGFfZXhwX21lZCwgdGhldGFfaW5leHBfbWVkKQpnZ3Bsb3QodGVtcCwgYWVzKHZhbHVlLCBmaWxsID0gZXhwKSkgKyAKICBnZW9tX2hpc3RvZ3JhbShhbHBoYSA9IDAuNSwgYmlucyA9IDEwMCwgcG9zaXRpb24gPSAnaWRlbnRpdHknKQpgYGAKCmV4cGxvcmUgZXhwZXJpZW5jZWQvaW5leHBlcmllbmNlZCBkaXN0cmlidXRpb25zIG9mIGJldGEgd2F2ZQpgYGB7cn0KYmV0YV9leHBfbWVkID0gc3Vic2V0X2FuZF9tZWx0KFRSVUUsIFRSVUUsICdiZXRhJywgJ0FMTCcsIFRSVUUsIFRSVUUpCmJldGFfaW5leHBfbWVkID0gc3Vic2V0X2FuZF9tZWx0KFRSVUUsIEZBTFNFLCAnYmV0YScsICdBTEwnLCBUUlVFLCBUUlVFKQpiZXRhX2V4cF9tZWQkZXhwIDwtICJleHBlcmllbmNlZCIKYmV0YV9leHBfbWVkJGV4cCA8LSBhcy5mYWN0b3IoYmV0YV9leHBfbWVkJGV4cCkKYmV0YV9pbmV4cF9tZWQkZXhwIDwtICJpbmV4cGVyaWVuY2VkIgpiZXRhX2luZXhwX21lZCRleHAgPC0gYXMuZmFjdG9yKGJldGFfaW5leHBfbWVkJGV4cCkKdGVtcCA8LSByYmluZChiZXRhX2V4cF9tZWQsIGJldGFfaW5leHBfbWVkKQpnZ3Bsb3QodGVtcCwgYWVzKHZhbHVlLCBmaWxsID0gZXhwKSkgKyAKICBnZW9tX2hpc3RvZ3JhbShhbHBoYSA9IDAuNSwgYmlucyA9IDEwMCwgcG9zaXRpb24gPSAnaWRlbnRpdHknKQpgYGAKCmV4cGxvcmUgZXhwZXJpZW5jZWQvaW5leHBlcmllbmNlZCBkaXN0cmlidXRpb25zIG9mIGdhbW1hIHdhdmUKYGBge3J9CmdhbW1hX2V4cF9tZWQgPSBzdWJzZXRfYW5kX21lbHQoVFJVRSwgVFJVRSwgJ2dhbW1hJywgJ0FMTCcsIFRSVUUsIFRSVUUpCmdhbW1hX2luZXhwX21lZCA9IHN1YnNldF9hbmRfbWVsdChUUlVFLCBGQUxTRSwgJ2dhbW1hJywgJ0FMTCcsIFRSVUUsIFRSVUUpCmdhbW1hX2V4cF9tZWQkZXhwIDwtICJleHBlcmllbmNlZCIKZ2FtbWFfZXhwX21lZCRleHAgPC0gYXMuZmFjdG9yKGdhbW1hX2V4cF9tZWQkZXhwKQpnYW1tYV9pbmV4cF9tZWQkZXhwIDwtICJpbmV4cGVyaWVuY2VkIgpnYW1tYV9pbmV4cF9tZWQkZXhwIDwtIGFzLmZhY3RvcihnYW1tYV9pbmV4cF9tZWQkZXhwKQp0ZW1wIDwtIHJiaW5kKGdhbW1hX2V4cF9tZWQsIGdhbW1hX2luZXhwX21lZCkKZ2dwbG90KHRlbXAsIGFlcyh2YWx1ZSwgZmlsbCA9IGV4cCkpICsgCiAgZ2VvbV9oaXN0b2dyYW0oYWxwaGEgPSAwLjUsIGJpbnMgPSAxMDAsIHBvc2l0aW9uID0gJ2lkZW50aXR5JykKYGBgCgpleHBsb3JlIGV4cGVyaWVuY2VkL2luZXhwZXJpZW5jZWQgZGlzdHJpYnV0aW9ucyBvZiBkZWx0YSB3YXZlCmBgYHtyfQpkZWx0YV9leHBfbWVkID0gc3Vic2V0X2FuZF9tZWx0KFRSVUUsIFRSVUUsICdkZWx0YScsICdBTEwnLCBUUlVFLCBUUlVFKQpkZWx0YV9pbmV4cF9tZWQgPSBzdWJzZXRfYW5kX21lbHQoVFJVRSwgRkFMU0UsICdkZWx0YScsICdBTEwnLCBUUlVFLCBUUlVFKQpkZWx0YV9leHBfbWVkJGV4cCA8LSAiZXhwZXJpZW5jZWQiCmRlbHRhX2V4cF9tZWQkZXhwIDwtIGFzLmZhY3RvcihkZWx0YV9leHBfbWVkJGV4cCkKZGVsdGFfaW5leHBfbWVkJGV4cCA8LSAiaW5leHBlcmllbmNlZCIKZGVsdGFfaW5leHBfbWVkJGV4cCA8LSBhcy5mYWN0b3IoZGVsdGFfaW5leHBfbWVkJGV4cCkKdGVtcCA8LSByYmluZChkZWx0YV9leHBfbWVkLCBkZWx0YV9pbmV4cF9tZWQpCmdncGxvdCh0ZW1wLCBhZXModmFsdWUsIGZpbGwgPSBleHApKSArIAogIGdlb21faGlzdG9ncmFtKGFscGhhID0gMC41LCBiaW5zID0gMTAwLCBwb3NpdGlvbiA9ICdpZGVudGl0eScpCmBgYAoKYGBge3J9CnQudGVzdChuYS5vbWl0KGFscGhhX2V4cF9tZWQkdmFsdWUpLCBuYS5vbWl0KGFscGhhX2luZXhwX21lZCR2YWx1ZSksIHZhci5lcXVhbCA9IFRSVUUpCmBgYAoKCmBgYHtyfQp0X3Rlc3QgPC0gZnVuY3Rpb24od2F2ZSwgbWVkKXsKICB3YXZlX2V4cCA8LSBzdWJzZXRfYW5kX21lbHQobWVkLCBUUlVFLCB3YXZlLCAiQWxsIiwgVFJVRSwgRkFMU0UpCiAgbWVkaWFuc19leHAgPC0gbGlzdCgpCiAgZm9yKGkgaW4gMTpsZW5ndGgod2F2ZV9leHApKXsKICAgIG1lZGlhbnNfZXhwW1tpXV0gPC0gbWVkaWFuKHdhdmVfZXhwW1tpXV0kdmFsdWUpCiAgfQogIHdhdmVfaW5leHAgPC0gc3Vic2V0X2FuZF9tZWx0KG1lZCwgRkFMU0UsIHdhdmUsICJBbGwiLCBUUlVFLCBGQUxTRSkKICBtZWRpYW5zX2luZXhwIDwtIGxpc3QoKQogIGZvcihpIGluIDE6bGVuZ3RoKHdhdmVfaW5leHApKXsKICAgIG1lZGlhbnNfaW5leHBbW2ldXSA8LSBtZWRpYW4od2F2ZV9pbmV4cFtbaV1dJHZhbHVlKQogIH0KICAKICBtZWRpYW5zX2V4cCA8LSB1bmxpc3QobWVkaWFuc19leHAsIHVzZS5uYW1lcz1GQUxTRSkKICBtZWRpYW5zX2luZXhwIDwtIHVubGlzdChtZWRpYW5zX2luZXhwLCB1c2UubmFtZXM9RkFMU0UpCiAgcmV0dXJuKHByaW50KHQudGVzdChtZWRpYW5zX2V4cCwgbWVkaWFuc19pbmV4cCkpKQp9CgpgYGAKCgpgYGB7cn0KdF90ZXN0KCJhbHBoYSIsIFRSVUUpCmBgYAoKYGBge3J9CmEgPC0gdF90ZXN0KCJiZXRhIiwgVFJVRSkKYGBgCgpgYGB7cn0KYSA8LSB0X3Rlc3QoImdhbW1hIiwgVFJVRSkKYGBgCgpgYGB7cn0KYSA8LSB0X3Rlc3QoImRlbHRhIiwgVFJVRSkKYGBgCgpgYGB7cn0KYSA8LSB0X3Rlc3QoInRoZXRhIiwgVFJVRSkKYGBgCgpUaGVyZSBpcyBubyBzaWduaWZpY2FudCBzdGF0aXN0aWNhbCBkaWZmZXJlbmNlIGluIG1lZGlhbnMgYW5kIG1lYW5zIGJldHdlZW4gZXhwZXJpZW5jZWQgYW5kCmluZXhwZXJpZW5jZWQgcGVvcGxlCgpgYGB7cn0KdF90ZXN0X21pbiA8LSBmdW5jdGlvbih3YXZlLCBtZWQpewogIHdhdmVfZXhwIDwtIHN1YnNldF9hbmRfbWVsdChtZWQsIFRSVUUsIHdhdmUsICJBbGwiLCBUUlVFLCBGQUxTRSkKICBtZWRpYW5zX2V4cCA8LSBsaXN0KCkKICBmb3IoaSBpbiAxOmxlbmd0aCh3YXZlX2V4cCkpewogICAgbWVkaWFuc19leHBbW2ldXSA8LSBtaW4od2F2ZV9leHBbW2ldXSR2YWx1ZSkKICB9CiAgd2F2ZV9pbmV4cCA8LSBzdWJzZXRfYW5kX21lbHQobWVkLCBGQUxTRSwgd2F2ZSwgIkFsbCIsIFRSVUUsIEZBTFNFKQogIG1lZGlhbnNfaW5leHAgPC0gbGlzdCgpCiAgZm9yKGkgaW4gMTpsZW5ndGgod2F2ZV9pbmV4cCkpewogICAgbWVkaWFuc19pbmV4cFtbaV1dIDwtIG1pbih3YXZlX2luZXhwW1tpXV0kdmFsdWUpCiAgfQogIAogIG1lZGlhbnNfZXhwIDwtIHVubGlzdChtZWRpYW5zX2V4cCwgdXNlLm5hbWVzPUZBTFNFKQogIG1lZGlhbnNfaW5leHAgPC0gdW5saXN0KG1lZGlhbnNfaW5leHAsIHVzZS5uYW1lcz1GQUxTRSkKICByZXR1cm4ocHJpbnQodC50ZXN0KG1lZGlhbnNfZXhwLCBtZWRpYW5zX2luZXhwKSkpCn0KYGBgCgpgYGB7cn0KYSA8LSB0X3Rlc3RfbWluKCJhbHBoYSIsIFRSVUUpCmEgPC0gdF90ZXN0X21pbigidGhldGEiLCBUUlVFKQphIDwtIHRfdGVzdF9taW4oImdhbW1hIiwgVFJVRSkKYSA8LSB0X3Rlc3RfbWluKCJiZXRhIiwgVFJVRSkKYSA8LSB0X3Rlc3RfbWluKCJkZWx0YSIsIFRSVUUpCmBgYAoKYGBge3J9CnRfdGVzdF9tYXggPC0gZnVuY3Rpb24od2F2ZSwgbWVkKXsKICB3YXZlX2V4cCA8LSBzdWJzZXRfYW5kX21lbHQobWVkLCBUUlVFLCB3YXZlLCAiQWxsIiwgVFJVRSwgRkFMU0UpCiAgbWVkaWFuc19leHAgPC0gbGlzdCgpCiAgZm9yKGkgaW4gMTpsZW5ndGgod2F2ZV9leHApKXsKICAgIG1lZGlhbnNfZXhwW1tpXV0gPC0gbWF4KHdhdmVfZXhwW1tpXV0kdmFsdWUpCiAgfQogIHdhdmVfaW5leHAgPC0gc3Vic2V0X2FuZF9tZWx0KG1lZCwgRkFMU0UsIHdhdmUsICJBbGwiLCBUUlVFLCBGQUxTRSkKICBtZWRpYW5zX2luZXhwIDwtIGxpc3QoKQogIGZvcihpIGluIDE6bGVuZ3RoKHdhdmVfaW5leHApKXsKICAgIG1lZGlhbnNfaW5leHBbW2ldXSA8LSBtYXgod2F2ZV9pbmV4cFtbaV1dJHZhbHVlKQogIH0KICAKICBtZWRpYW5zX2V4cCA8LSB1bmxpc3QobWVkaWFuc19leHAsIHVzZS5uYW1lcz1GQUxTRSkKICBtZWRpYW5zX2luZXhwIDwtIHVubGlzdChtZWRpYW5zX2luZXhwLCB1c2UubmFtZXM9RkFMU0UpCiAgcmV0dXJuKHByaW50KHQudGVzdChtZWRpYW5zX2V4cCwgbWVkaWFuc19pbmV4cCkpKQp9CmBgYAoKYGBge3J9CmEgPC0gdF90ZXN0X21heCgiYWxwaGEiLCBUUlVFKQphIDwtIHRfdGVzdF9tYXgoInRoZXRhIiwgVFJVRSkKYSA8LSB0X3Rlc3RfbWF4KCJnYW1tYSIsIFRSVUUpCmEgPC0gdF90ZXN0X21heCgiYmV0YSIsIFRSVUUpCmEgPC0gdF90ZXN0X21heCgiZGVsdGEiLCBUUlVFKQpgYGAKYGBge3J9CiNnZ3Bsb3QodGVtcCwgYWVzKHZhbHVlLCBmaWxsID0gZXhwKSkgKyAKIyAgZ2VvbV9oaXN0b2dyYW0oYWxwaGEgPSAwLjUsIGJpbnMgPSAxMDAsIHBvc2l0aW9uID0gJ2lkZW50aXR5JykKCmRhdGFfdGVtcCA8LSBzdWJzZXRfYW5kX21lbHQoVFJVRSwgVFJVRSwgJ2FscGhhJywgIkFMTCIsIFRSVUUsIFRSVUUpCgojZ2VvbV9saW5lKGFlcyh5PXRoZXRhX2Fic29sdXRlXzIsIHggPSB0aW1lc3RhbXBzKSwgCiMgICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbM10pICsgI2dlb21fc21vb3RoKGFlcyh5PXRoZXRhX2Fic29sdXRlXzIsIHggPSB0aW1lc3RhbXBzKSwgCiMgICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbM10sIHNwYW4gPSAwLjAxKSArCmBgYAoKYGBge3J9CgojdGVtcHMgPC0gZGF0YV90ZW1wW2RhdGFfdGVtcCRMMSA9PSAxICYgZGF0YV90ZW1wJHdhdmVzID09ICJhbHBoYV9hYnNvbHV0ZV8xIiwgXQojIGRhdGFfdGVtcCRMMSA9PSAxLAojZGF0YV90ZW1wJHdhdmVzID09ICJhbHBoYV9hYnNvbHV0ZV8xIiwgCgojZGF0YV90ZW1wIDwtIGRhdGFfdGVtcFtkYXRhX3RlbXAkTDEgPT0gMSxdCgp0b19kcmF3IDwtIGRhdGFfdGVtcFtkYXRhX3RlbXAkTDEgPT0gMSAmIGRhdGFfdGVtcCR3YXZlcyA9PSAiYWxwaGFfYWJzb2x1dGVfMSIsIF0KI2dncGxvdChhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcyksIGRhdGEgPSBkYXRhX3RlbXAsIGRhdGFfdGVtcCR3YXZlcyA9PSAiYWxwaGFfYWJzb2x1dGVfMSIpICsKCiNnZ3Bsb3QoKSArIAojICBnZW9tX2xpbmUoYWVzKFNNQSh0b19kcmF3JHZhbHVlLCBuPTE1KSwgeCA9IHRvX2RyYXckdGltZXN0YW1wcykpCgojZ2dwbG90KGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzKSwgZGF0YSA9IGRhdGFfdGVtcCwgZGF0YV90ZW1wJHdhdmVzID09ICJhbHBoYV9hYnNvbHV0ZV8xIikgKwogICNnZW9tX2xpbmUoKSArCiMgIGdlb21fc21vb3RoKHNwYW4gPSAwLjAwMSwgbGV2ZWwgPSAwLjk1LCBtZXRob2QgPSAnbG9lc3MnKSAKYGBgCgpgYGB7cn0KdGVtcCA8LSBlcyh0b19kcmF3JHZhbHVlLCBoPTE4LCBob2xkb3V0PVRSVUUsIHNpbGVudD1GQUxTRSkKYGBgCgpgYGB7cn0KCmBgYAoKYGBge3J9CiN0b19kcmF3X3BhcnQkc21hIDwtIHNtYSh0b19kcmF3X3BhcnQkdmFsdWUsIG4gPSA1LCB2ID0gMC45KSRmaXR0ZWQKdG9fZHJhd19wYXJ0JGxvZXNzIDwtIGxvZXNzKHZhbHVlIH4gdGltZXN0YW1wcywgZGF0YT10b19kcmF3X3BhcnQsIHNwYW49MC42NSkkZml0dGVkCmBgYAoKYGBge3J9CgpnZ3Bsb3QoKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzKSwgZGF0YSA9IHRvX2RyYXdfcGFydCkgKwogIGdlb21fc21vb3RoKGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzKSwgZGF0YSA9IHRvX2RyYXdfcGFydCwgc3BhbiA9IDEsIG4gPSAxNSwgY29sb3IgPSAiYmx1ZSIpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBsb2VzcywgeCA9IHRpbWVzdGFtcHMpLCBkYXRhID0gdG9fZHJhd19wYXJ0LCBjb2xvciA9ICdyZWQnKQpgYGAKCgpgYGB7cn0KZ2dwbG90KCkgKwogIGdlb21fc21vb3RoKGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzKSwgZGF0YSA9IHRoZXRhX2V4cF9tZWRbdGhldGFfZXhwX21lZCR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMicsXSwgc3BhbiA9IDEsIG4gPSAxNSwgY29sb3IgPSAiYmx1ZSIpICsKICBnZW9tX2xpbmUoYWVzKHkgPSB2YWx1ZSwgeCA9IHRpbWVzdGFtcHMpLCBkYXRhID0gdGhldGFfZXhwX21lZFt0aGV0YV9leHBfbWVkJHdhdmVzID09ICdsb2Vzc190aGV0YV9hYnNvbHV0ZV8yJyxdLCBjb2xvciA9ICdyZWQnLCBhbHBoYSA9IDAuMikgKwogIGdlb21fbGluZShhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcyksIGRhdGEgPSB0aGV0YV9leHBfbWVkW3RoZXRhX2V4cF9tZWQkd2F2ZXMgPT0gJ3RoZXRhX2Fic29sdXRlXzInLF0sIGNvbG9yID0gJ2JsYWNrJywgYWxwaGEgPSAwLjIpCmBgYApgYGB7cn0KY3Vycl9kYXRhIDwtIHRoZXRhX2V4cF9tZWRbdGhldGFfZXhwX21lZCRMMSA9PSAnMScsXQoKI1t0aGV0YV9leHBfbWVkJHdhdmVzID09ICd0aGV0YV9hYnNvbHV0ZV8yJyAmIAogICAgCmdncGxvdChhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcyksIGRhdGEgPSBjdXJyX2RhdGEpICsKICBnZW9tX2xpbmUoZGF0YSA9IGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ3RoZXRhX2Fic29sdXRlXzInLCBdLCBjb2xvciA9ICdyZWQnLCBhbHBoYSA9IDAuNykgKwogIGdlb21fbGluZShkYXRhID0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMicsXSwgY29sb3IgPSAnYmxhY2snLCBhbHBoYSA9IDEpCmBgYAoKYGBge3J9CnRlbXAgPC0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMicsIF0KbG9lc3Nfb3JkZXJlZCA8LSB0ZW1wJHZhbHVlCmxvZXNzX29yZGVyZWQgPC0gc29ydChsb2Vzc19vcmRlcmVkKQptaW4obG9lc3Nfb3JkZXJlZCkKYmFycGxvdChsb2Vzc19vcmRlcmVkKQpgYGAKYGBge3J9CnRlbXAkc3RhdGUgPC0gY3V0KHRlbXAkdmFsdWUsIHF1YW50aWxlKHRlbXAkdmFsdWUsKDA6NSkvNSkpCgpnZ3Bsb3QoYWVzKHkgPSB2YWx1ZSwgeCA9IHRpbWVzdGFtcHMpLCBkYXRhID0gY3Vycl9kYXRhKSArCiAgZ2VvbV9saW5lKGRhdGEgPSBjdXJyX2RhdGFbY3Vycl9kYXRhJHdhdmVzID09ICd0aGV0YV9hYnNvbHV0ZV8yJywgXSwgY29sb3IgPSAnZ3JleScsIGFscGhhID0gMC43KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBjdXJyX2RhdGFbY3Vycl9kYXRhJHdhdmVzID09ICdsb2Vzc190aGV0YV9hYnNvbHV0ZV8yJyxdLCBjb2xvciA9ICdibGFjaycsIGFscGhhID0gMSkgKwogIGdlb21fbGluZShhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcywgY29sb3IgPSBzdGF0ZSwgc2l6ZSA9IDIpLGRhdGEgPSB0ZW1wLCBhbHBoYSA9IDEpIAogIApgYGAKCgp0aGV0YV8yLCBzZWNvbmQgcGVyc29uCmBgYHtyfQpjdXJyX2RhdGEgPC0gdGhldGFfZXhwX21lZFt0aGV0YV9leHBfbWVkJEwxID09ICcyJyxdCnRlbXAgPC0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMicsIF0KdGVtcCRzdGF0ZSA8LSBjdXQodGVtcCR2YWx1ZSwgcXVhbnRpbGUodGVtcCR2YWx1ZSwoMDo1KS81KSkKCmdncGxvdChhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcyksIGRhdGEgPSBjdXJyX2RhdGEpICsKICBnZW9tX2xpbmUoZGF0YSA9IGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ3RoZXRhX2Fic29sdXRlXzInLCBdLCBjb2xvciA9ICdncmV5JywgYWxwaGEgPSAwLjcpICsKICBnZW9tX2xpbmUoZGF0YSA9IGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ2xvZXNzX3RoZXRhX2Fic29sdXRlXzInLF0sIGNvbG9yID0gJ2JsYWNrJywgYWxwaGEgPSAxKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzLCBjb2xvciA9IHN0YXRlLCBzaXplID0gMiksZGF0YSA9IHRlbXAsIGFscGhhID0gMSkgCmBgYAoKYGBge3J9CmN1cnJfZGF0YSA8LSB0aGV0YV9leHBfbWVkW3RoZXRhX2V4cF9tZWQkTDEgPT0gJzMnLF0KdGVtcCA8LSBjdXJyX2RhdGFbY3Vycl9kYXRhJHdhdmVzID09ICdsb2Vzc190aGV0YV9hYnNvbHV0ZV8yJywgXQp0ZW1wJHN0YXRlIDwtIGN1dCh0ZW1wJHZhbHVlLCBxdWFudGlsZSh0ZW1wJHZhbHVlLCgwOjUpLzUpKQoKZ2dwbG90KGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzKSwgZGF0YSA9IGN1cnJfZGF0YSkgKwogIGdlb21fbGluZShkYXRhID0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAndGhldGFfYWJzb2x1dGVfMicsIF0sIGNvbG9yID0gJ2dyZXknLCBhbHBoYSA9IDAuNykgKwogIGdlb21fbGluZShkYXRhID0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMicsXSwgY29sb3IgPSAnYmxhY2snLCBhbHBoYSA9IDEpICsKICBnZW9tX2xpbmUoYWVzKHkgPSB2YWx1ZSwgeCA9IHRpbWVzdGFtcHMsIGNvbG9yID0gc3RhdGUsIHNpemUgPSAyKSxkYXRhID0gdGVtcCwgYWxwaGEgPSAxKSAKYGBgCgpgYGB7cn0KY3Vycl9kYXRhIDwtIHRoZXRhX2V4cF9tZWRbdGhldGFfZXhwX21lZCRMMSA9PSAnNCcsXQp0ZW1wIDwtIGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ2xvZXNzX3RoZXRhX2Fic29sdXRlXzInLCBdCnRlbXAkc3RhdGUgPC0gY3V0KHRlbXAkdmFsdWUsIHF1YW50aWxlKHRlbXAkdmFsdWUsKDA6NSkvNSkpCgpnZ3Bsb3QoYWVzKHkgPSB2YWx1ZSwgeCA9IHRpbWVzdGFtcHMpLCBkYXRhID0gY3Vycl9kYXRhKSArCiAgZ2VvbV9saW5lKGRhdGEgPSBjdXJyX2RhdGFbY3Vycl9kYXRhJHdhdmVzID09ICd0aGV0YV9hYnNvbHV0ZV8yJywgXSwgY29sb3IgPSAnZ3JleScsIGFscGhhID0gMC43KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBjdXJyX2RhdGFbY3Vycl9kYXRhJHdhdmVzID09ICdsb2Vzc190aGV0YV9hYnNvbHV0ZV8yJyxdLCBjb2xvciA9ICdibGFjaycsIGFscGhhID0gMSkgKwogIGdlb21fbGluZShhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcywgY29sb3IgPSBzdGF0ZSwgc2l6ZSA9IDIpLGRhdGEgPSB0ZW1wLCBhbHBoYSA9IDEpIApgYGAKCmBgYHtyfQpjdXJyX2RhdGEgPC0gdGhldGFfZXhwX21lZFt0aGV0YV9leHBfbWVkJEwxID09ICc2JyxdCnRlbXAgPC0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMicsIF0KdGVtcCRzdGF0ZSA8LSBjdXQodGVtcCR2YWx1ZSwgcXVhbnRpbGUodGVtcCR2YWx1ZSwoMDo1KS81KSkKCmdncGxvdChhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcyksIGRhdGEgPSBjdXJyX2RhdGEpICsKICBnZW9tX2xpbmUoZGF0YSA9IGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ3RoZXRhX2Fic29sdXRlXzInLCBdLCBjb2xvciA9ICdncmV5JywgYWxwaGEgPSAwLjcpICsKICBnZW9tX2xpbmUoZGF0YSA9IGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ2xvZXNzX3RoZXRhX2Fic29sdXRlXzInLF0sIGNvbG9yID0gJ2JsYWNrJywgYWxwaGEgPSAxKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzLCBjb2xvciA9IHN0YXRlLCBzaXplID0gMiksZGF0YSA9IHRlbXAsIGFscGhhID0gMSkgCmBgYApgYGB7cn0KY3Vycl9kYXRhIDwtIHRoZXRhX2V4cF9tZWRbdGhldGFfZXhwX21lZCRMMSA9PSAnNycsXQp0ZW1wIDwtIGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ2xvZXNzX3RoZXRhX2Fic29sdXRlXzInLCBdCnRlbXAkc3RhdGUgPC0gY3V0KHRlbXAkdmFsdWUsIHF1YW50aWxlKHRlbXAkdmFsdWUsKDA6NSkvNSkpCgpnZ3Bsb3QoYWVzKHkgPSB2YWx1ZSwgeCA9IHRpbWVzdGFtcHMpLCBkYXRhID0gY3Vycl9kYXRhKSArCiAgZ2VvbV9saW5lKGRhdGEgPSBjdXJyX2RhdGFbY3Vycl9kYXRhJHdhdmVzID09ICd0aGV0YV9hYnNvbHV0ZV8yJywgXSwgY29sb3IgPSAnZ3JleScsIGFscGhhID0gMC43KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBjdXJyX2RhdGFbY3Vycl9kYXRhJHdhdmVzID09ICdsb2Vzc190aGV0YV9hYnNvbHV0ZV8yJyxdLCBjb2xvciA9ICdibGFjaycsIGFscGhhID0gMSkgKwogIGdlb21fbGluZShhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcywgY29sb3IgPSBzdGF0ZSwgc2l6ZSA9IDIpLGRhdGEgPSB0ZW1wLCBhbHBoYSA9IDEpIApgYGAKCmBgYHtyfQpjdXJyX2RhdGEgPC0gdGhldGFfZXhwX21lZFt0aGV0YV9leHBfbWVkJEwxID09ICc4JyxdCnRlbXAgPC0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMicsIF0KdGVtcCRzdGF0ZSA8LSBjdXQodGVtcCR2YWx1ZSwgcXVhbnRpbGUodGVtcCR2YWx1ZSwoMDo1KS81KSkKCmdncGxvdChhZXMoeSA9IHZhbHVlLCB4ID0gdGltZXN0YW1wcyksIGRhdGEgPSBjdXJyX2RhdGEpICsKICBnZW9tX2xpbmUoZGF0YSA9IGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ3RoZXRhX2Fic29sdXRlXzInLCBdLCBjb2xvciA9ICdncmV5JywgYWxwaGEgPSAwLjcpICsKICBnZW9tX2xpbmUoZGF0YSA9IGN1cnJfZGF0YVtjdXJyX2RhdGEkd2F2ZXMgPT0gJ2xvZXNzX3RoZXRhX2Fic29sdXRlXzInLF0sIGNvbG9yID0gJ2JsYWNrJywgYWxwaGEgPSAxKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzLCBjb2xvciA9IHN0YXRlLCBzaXplID0gMiksZGF0YSA9IHRlbXAsIGFscGhhID0gMSkgCmBgYAoKYGBge3J9CmN1cnJfZGF0YSA8LSBhbHBoYV9leHBfbWVkW3RoZXRhX2V4cF9tZWQkTDEgPT0gJzEnLF0KdGVtcCA8LSBjdXJyX2RhdGFbY3Vycl9kYXRhJHdhdmVzID09ICdsb2Vzc19hbHBoYV9hYnNvbHV0ZV8yJywgXQp0ZW1wJHN0YXRlIDwtIGN1dCh0ZW1wJHZhbHVlLCBxdWFudGlsZSh0ZW1wJHZhbHVlLCgwOjUpLzUpKQoKZ2dwbG90KGFlcyh5ID0gdmFsdWUsIHggPSB0aW1lc3RhbXBzKSwgZGF0YSA9IGN1cnJfZGF0YSkgKwogIGdlb21fbGluZShkYXRhID0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAnYWxwaGFfYWJzb2x1dGVfMicsIF0sIGNvbG9yID0gJ2dyZXknLCBhbHBoYSA9IDAuNykgKwogIGdlb21fbGluZShkYXRhID0gY3Vycl9kYXRhW2N1cnJfZGF0YSR3YXZlcyA9PSAnbG9lc3NfYWxwaGFfYWJzb2x1dGVfMicsXSwgY29sb3IgPSAnYmxhY2snLCBhbHBoYSA9IDEpICsKICBnZW9tX2xpbmUoYWVzKHkgPSB2YWx1ZSwgeCA9IHRpbWVzdGFtcHMsIGNvbG9yID0gc3RhdGUsIHNpemUgPSAyKSxkYXRhID0gdGVtcCwgYWxwaGEgPSAxKSAKYGBgCgpgYGB7cn0KCmBgYAoKYGBge3J9CmFscGhhXzJfYWxsX2V4cCA8LSBzdWJzZXRfYW5kX21lbHQoVFJVRSwgVFJVRSwgJ2FscGhhJywgJ0FsbCcsIFRSVUUsIFRSVUUpCgpnZ3Bsb3QoYWVzKHggPSB0aW1lc3RhbXBzLCB5ID0gdmFsdWUpLCBkYXRhID0gYWxwaGFfMl9hbGxfZXhwW2FscGhhXzJfYWxsX2V4cCR3YXZlcyA9PSAnbG9lc3NfYWxwaGFfYWJzb2x1dGVfMicsXSkgKwogIGdlb21fbGluZShhZXMoY29sb3IgPSBMMSkpICsKICBnZ3RpdGxlKCJhbHBoYSAyLCBleHAiKQpgYGAKCmBgYHtyfQphbHBoYV8yX2FsbF9leHAgPC0gc3Vic2V0X2FuZF9tZWx0KFRSVUUsIFRSVUUsICdhbHBoYScsICdBbGwnLCBUUlVFLCBUUlVFKQoKZ2dwbG90KGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlKSwgZGF0YSA9IGFscGhhXzJfYWxsX2V4cFthbHBoYV8yX2FsbF9leHAkd2F2ZXMgPT0gJ2xvZXNzX2FscGhhX2Fic29sdXRlXzEnLF0pICsKICBnZW9tX2xpbmUoYWVzKGNvbG9yID0gTDEpKSArCiAgZ2d0aXRsZSgiYWxwaGEgMSwgZXhwIikKYGBgCgpgYGB7cn0KYWxwaGFfMl9hbGxfZXhwIDwtIHN1YnNldF9hbmRfbWVsdChUUlVFLCBUUlVFLCAnYWxwaGEnLCAnQWxsJywgVFJVRSwgVFJVRSkKCmdncGxvdChhZXMoeCA9IHRpbWVzdGFtcHMsIHkgPSB2YWx1ZSksIGRhdGEgPSBhbHBoYV8yX2FsbF9leHBbYWxwaGFfMl9hbGxfZXhwJHdhdmVzID09ICdsb2Vzc19hbHBoYV9hYnNvbHV0ZV8zJyxdKSArCiAgZ2VvbV9saW5lKGFlcyhjb2xvciA9IEwxKSkgKwogIGdndGl0bGUoImFscGhhIDMsIGV4cCIpCmBgYAoKYGBge3J9CmFscGhhXzJfYWxsX2V4cCA8LSBzdWJzZXRfYW5kX21lbHQoVFJVRSwgVFJVRSwgJ2FscGhhJywgJ0FsbCcsIFRSVUUsIFRSVUUpCgpnZ3Bsb3QoYWVzKHggPSB0aW1lc3RhbXBzLCB5ID0gdmFsdWUpLCBkYXRhID0gYWxwaGFfMl9hbGxfZXhwW2FscGhhXzJfYWxsX2V4cCR3YXZlcyA9PSAnbG9lc3NfYWxwaGFfYWJzb2x1dGVfNCcsXSkgKwogIGdlb21fbGluZShhZXMoY29sb3IgPSBMMSkpICsKICBnZ3RpdGxlKCJhbHBoYSA0LCBleHAiKQpgYGAKCmBgYHtyfQphbHBoYV8yX2FsbF9leHAgPC0gc3Vic2V0X2FuZF9tZWx0KFRSVUUsIEZBTFNFLCAnYWxwaGEnLCAnQWxsJywgVFJVRSwgVFJVRSkKCmdncGxvdChhZXMoeCA9IHRpbWVzdGFtcHMsIHkgPSB2YWx1ZSksIGRhdGEgPSBhbHBoYV8yX2FsbF9leHBbYWxwaGFfMl9hbGxfZXhwJHdhdmVzID09ICdsb2Vzc19hbHBoYV9hYnNvbHV0ZV8yJyxdKSArCiAgZ2VvbV9saW5lKGFlcyhjb2xvciA9IEwxKSkgKwogIGdndGl0bGUoImFscGhhIDIsIGluZXhwIikKYGBgCgpgYGB7cn0KZ2dwbG90KGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlKSwgZGF0YSA9IGFscGhhXzJfYWxsX2V4cFthbHBoYV8yX2FsbF9leHAkd2F2ZXMgPT0gJ2xvZXNzX2FscGhhX2Fic29sdXRlXzEnLF0pICsKICBnZW9tX2xpbmUoYWVzKGNvbG9yID0gTDEpKSArCiAgZ2d0aXRsZSgiYWxwaGEgMSwgaW5leHAiKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoYWVzKHggPSB0aW1lc3RhbXBzLCB5ID0gdmFsdWUpLCBkYXRhID0gYWxwaGFfMl9hbGxfZXhwW2FscGhhXzJfYWxsX2V4cCR3YXZlcyA9PSAnbG9lc3NfYWxwaGFfYWJzb2x1dGVfMycsXSkgKwogIGdlb21fbGluZShhZXMoY29sb3IgPSBMMSkpICsKICBnZ3RpdGxlKCJhbHBoYSAzLCBpbmV4cCIpCmBgYAoKYGBge3J9CmdncGxvdChhZXMoeCA9IHRpbWVzdGFtcHMsIHkgPSB2YWx1ZSksIGRhdGEgPSBhbHBoYV8yX2FsbF9leHBbYWxwaGFfMl9hbGxfZXhwJHdhdmVzID09ICdsb2Vzc19hbHBoYV9hYnNvbHV0ZV80JyxdKSArCiAgZ2VvbV9saW5lKGFlcyhjb2xvciA9IEwxKSkgKwogIGdndGl0bGUoImFscGhhIDQsIGluZXhwIikKYGBgCgpgYGB7cn0KdGVtcCA8LSBzdWJzZXRfYW5kX21lbHQoVFJVRSwgVFJVRSwgJ3RoZXRhJywgJ0FsbCcsIFRSVUUsIFRSVUUpCgpnZ3Bsb3QoYWVzKHggPSB0aW1lc3RhbXBzLCB5ID0gdmFsdWUpLCBkYXRhID0gdGVtcFt0ZW1wJHdhdmVzID09ICdsb2Vzc190aGV0YV9hYnNvbHV0ZV8xJyxdKSArCiAgZ2VvbV9saW5lKGFlcyhjb2xvciA9IEwxKSkgKwogIGdndGl0bGUoInRoZXRhIDEsIGV4cCIpCmBgYAoKYGBge3J9CmdncGxvdChhZXMoeCA9IHRpbWVzdGFtcHMsIHkgPSB2YWx1ZSksIGRhdGEgPSB0ZW1wW3RlbXAkd2F2ZXMgPT0gJ2xvZXNzX3RoZXRhX2Fic29sdXRlXzInLF0pICsKICBnZW9tX2xpbmUoYWVzKGNvbG9yID0gTDEpKSArCiAgZ2d0aXRsZSgidGhldGEgMiwgZXhwIikKYGBgCgpgYGB7cn0KZ2dwbG90KGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlKSwgZGF0YSA9IHRlbXBbdGVtcCR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMycsXSkgKwogIGdlb21fbGluZShhZXMoY29sb3IgPSBMMSkpICsKICBnZ3RpdGxlKCJ0aGV0YSAzLCBleHAiKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoYWVzKHggPSB0aW1lc3RhbXBzLCB5ID0gdmFsdWUpLCBkYXRhID0gdGVtcFt0ZW1wJHdhdmVzID09ICdsb2Vzc190aGV0YV9hYnNvbHV0ZV80JyxdKSArCiAgZ2VvbV9saW5lKGFlcyhjb2xvciA9IEwxKSkgKwogIGdndGl0bGUoInRoZXRhIDQsIGV4cCIpCmBgYAoKYGBge3J9CnRlbXAgPC0gc3Vic2V0X2FuZF9tZWx0KFRSVUUsIFRSVUUsICdhbHBoYScsICd0aGV0YScsIFRSVUUsIFRSVUUpCgpnZ3Bsb3QoKSArCiAgZ2VvbV9saW5lKGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlLCBjb2xvciA9IEwxKSwgZGF0YSA9IHRlbXBbdGVtcCR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMScsXSwgIHNpemUgPSAxKSArCiAgZ2d0aXRsZSgidGhldGEgMSBhbmQgYWxwaGEgMSwgZXhwIikgKwogIGdlb21fbGluZShhZXMoeCA9IHRpbWVzdGFtcHMsIHkgPSB2YWx1ZSwgY29sb3IgPSBMMSksIGRhdGEgPSB0ZW1wW3RlbXAkd2F2ZXMgPT0gJ2xvZXNzX2FscGhhX2Fic29sdXRlXzEnLF0sIGxpbmV0eXBlID0gJ2RvdHRlZCcsIHNpemUgPSAxKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU3BlY3RyYWwiKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoKSArCiAgZ2VvbV9saW5lKGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlLCBjb2xvciA9IEwxKSwgZGF0YSA9IHRlbXBbdGVtcCR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMicsXSwgIHNpemUgPSAxKSArCiAgZ2VvbV9saW5lKGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlLCBjb2xvciA9IEwxKSwgZGF0YSA9IHRlbXBbdGVtcCR3YXZlcyA9PSAnbG9lc3NfYWxwaGFfYWJzb2x1dGVfMicsXSwgbGluZXR5cGUgPSAnZG90dGVkJywgc2l6ZSA9IDEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIpICsKICBnZ3RpdGxlKCJ0aGV0YSAyIGFuZCBhbHBoYSAyLCBleHAiKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoKSArCiAgZ2VvbV9saW5lKGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlLCBjb2xvciA9IEwxKSwgZGF0YSA9IHRlbXBbdGVtcCR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfMycsXSwgIHNpemUgPSAxKSArCiAgZ2VvbV9saW5lKGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlLCBjb2xvciA9IEwxKSwgZGF0YSA9IHRlbXBbdGVtcCR3YXZlcyA9PSAnbG9lc3NfYWxwaGFfYWJzb2x1dGVfMycsXSwgbGluZXR5cGUgPSAnZG90dGVkJywgc2l6ZSA9IDEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIpICsKICBnZ3RpdGxlKCJ0aGV0YSAzIGFuZCBhbHBoYSAzLCBleHAiKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoKSArCiAgZ2VvbV9saW5lKGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlLCBjb2xvciA9IEwxKSwgZGF0YSA9IHRlbXBbdGVtcCR3YXZlcyA9PSAnbG9lc3NfdGhldGFfYWJzb2x1dGVfNCcsXSwgIHNpemUgPSAxKSArCiAgZ2VvbV9saW5lKGFlcyh4ID0gdGltZXN0YW1wcywgeSA9IHZhbHVlLCBjb2xvciA9IEwxKSwgZGF0YSA9IHRlbXBbdGVtcCR3YXZlcyA9PSAnbG9lc3NfYWxwaGFfYWJzb2x1dGVfNCcsXSwgbGluZXR5cGUgPSAnZG90dGVkJywgc2l6ZSA9IDEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIpICsKICBnZ3RpdGxlKCJ0aGV0YSA0IGFuZCBhbHBoYSA0LCBleHAiKQpgYGAKCg==